import { Request, Response } from 'express';
import crypto from 'crypto';

// 使用与token controller相同的API Key
const VALID_API_KEY = 'ak_s41kObF3rTp5TEAvtT';

// PPT生成回调接口
export const pptGenerateCallback = async (req: Request, res: Response) => {
  try {
    const { event, data } = req.body;
    const signature = req.headers['x-signature'] as string;

    // 验证事件类型
    if (event !== 'ppt_generate') {
      return res.status(400).json({
        ok: false,
        msg: '无效的事件类型'
      });
    }

    // 获取回调数据
    const { uid, pptId, name, subject, coverUrl, fileUrl, createTime } = data;

    // 如果是测试请求，直接返回成功
    if (pptId === 'test') {
      console.log('收到PPT生成测试回调请求');
      return res.json({
        ok: true,
        msg: '操作成功'
      });
    }

    // 验证签名
    const expectedSignature = crypto
      .createHash('md5')
      .update(`${uid}${pptId}${VALID_API_KEY}`)
      .digest('hex');

    if (signature !== expectedSignature) {
      console.error('PPT生成回调签名验证失败', {
        receivedSignature: signature,
        expectedSignature,
        uid,
        pptId
      });
      return res.status(401).json({
        ok: false,
        msg: '签名验证失败'
      });
    }

    // 处理PPT生成成功的业务逻辑
    console.log('收到PPT生成回调', {
      uid,
      pptId,
      name,
      subject,
      coverUrl,
      fileUrl,
      createTime
    });

    // TODO: 在此处添加业务逻辑，例如更新数据库等

    return res.json({
      ok: true,
      msg: '操作成功'
    });
  } catch (error) {
    console.error('处理PPT生成回调失败:', error);
    return res.status(500).json({
      ok: false,
      msg: error instanceof Error ? error.message : '处理回调失败'
    });
  }
};

// 模板上传回调接口
export const templateUploadCallback = async (req: Request, res: Response) => {
  try {
    const { event, data } = req.body;
    const signature = req.headers['x-signature'] as string;

    // 验证事件类型
    if (event !== 'template_upload') {
      return res.status(400).json({
        ok: false,
        msg: '无效的事件类型'
      });
    }

    // 获取回调数据
    const { uid, templateId, coverUrl, fileUrl, createTime } = data;

    // 如果是测试请求（templateId为test），直接返回成功
    if (templateId === 'test') {
      console.log('收到模板上传测试回调请求');
      return res.json({
        ok: true,
        msg: '操作成功'
      });
    }

    // 验证签名
    const expectedSignature = crypto
      .createHash('md5')
      .update(`${uid}${templateId}${VALID_API_KEY}`)
      .digest('hex');

    if (signature !== expectedSignature) {
      console.error('模板上传回调签名验证失败', {
        receivedSignature: signature,
        expectedSignature,
        uid,
        templateId
      });
      return res.status(401).json({
        ok: false,
        msg: '签名验证失败'
      });
    }

    // 处理模板上传成功的业务逻辑
    console.log('收到模板上传回调', {
      uid,
      templateId,
      coverUrl,
      fileUrl,
      createTime
    });

    // TODO: 在此处添加业务逻辑，例如更新数据库等

    return res.json({
      ok: true,
      msg: '操作成功'
    });
  } catch (error) {
    console.error('处理模板上传回调失败:', error);
    return res.status(500).json({
      ok: false,
      msg: error instanceof Error ? error.message : '处理回调失败'
    });
  }
}; 